/****************************************************************************

	COPYRIGHT(C) MAXSI SOFTWARE, JONAS 'SORTIE' TERMANSEN 2008, 2009, 2010

    This file is part of Maxsi Engine.

    Maxsi Engine is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    Maxsi Engine is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with Maxsi Engine. If not, see <http://www.gnu.org/licenses/>.

	*/ #include "MaxsiEngineContributors.h" /*

	If you modify this file, please enter your name below and provide contact
	information in MaxsiEngineContributors.h. For more information please see
	MaxsiEngineContributors.h.
	
	Contributors to this file:

	- Jonas 'Sortie' Termansen
	- [your name here]

	MaxsiEngine.dll
	A linkable version of Maxsi Engine

	MaxsiDataContainer.cpp
	A very simple binary-safe text-based data container format. The data itself
	has no predefined meaning by this protocol and any meaning should be given
	by any subprotocols.

****************************************************************************/

#ifndef MaxsiDataContainer_H
#define MaxsiDataContainer_H

namespace MaxsiEngine
{
	CLASSLINK MaxsiDataContainer
	{
	public:
		MaxsiDataContainer();
		~MaxsiDataContainer();

	private:
		bool	AppendToTemp(char* Input, size_t Size);
		bool	ClearTemp();
		char*	GetTemp();

	public:
		List	TemporaryVariable;
		char*	TemporaryVariableCache;
		size_t	TemporaryVariableCacheLen;
		char*	VariableName;
		size_t	VariableLen;
		size_t	VariableLeft;
		char*	ExternalCache;
		char*	InternalCache;
		bool	ChangedExternalCache;
		char	OldExternalCache;

	public:
		bool	GetNextVariable(char* Input, size_t Size, size_t &Read);
		bool	Done();

		char*	Variable();
		char*	VariableTemp();
		char*	VariableKeep();

	public:
		size_t	Step;

	};
}

#endif
